home *** CD-ROM | disk | FTP | other *** search
- {
- Coding & Editing by :
- █▀▀▀▀▀▀█ █▀▀▀▀▀▀█ █▀▀▀▀▀▀█ █▀▀▀▀▀▀█ █▀▀▀▀▀█ █ █▀▀▀▀▀▀▀ █▀▀▀▀▀▀▀
- █▀▀▀▀▀▀▀ █▀▀▀▀▀▀█ █▀▀▀▀▀█▀ █▀▀▀▀▀▀█ █ █ █ ▀▀▀▀▀▀▀█ █▀▀▀▀▀
- █ █ █ █ █ █ █ █ █ █ █ █
- █ █ █ █ █ █ █ █ █ █ █ █
- █ █ █ █ █ █ █ █ █ █ █ █
- █ █ █ █ █ █ █ █▄▄▄▄▄█ █ ▄▄▄▄▄▄▄█ █▄▄▄▄▄▄▄
-
- Programmed by Marcin Jaskowiak, aka Paradise, Lublin, Poland,
- in Turbo Pascal 7.0.
-
- This is FUQNWARE - if u like it, u must register it by sending
- some money (u tell how much) to ME:) if not - u choose.
- Read TED.DOC 4 more info.
-
- Snail mail: Email:
- Marcin Jaskowiak liksay@bachus.umcs.lublin.pl
- Flat 114, 3 Zarnowiecka Str.
- 20-630 Lublin
- Poland
-
- Presents :
- TED font editor SCROLLERS PACK 94
- with :
- EXAMPLE NR 9
- }
- PROGRAM TED_INTRO_NR9;
- USES DOS,CRT;
-
- CONST
- SEGA000 : WORD = $A000;
- SCR_OFS : WORD = 22400;
- VAR
- BITMAP : ARRAY [1..60,0..319] OF BYTE;
- PALETTE : ARRAY [0..255,1..3] OF BYTE;
- CHARS : ARRAY [' '..']'] OF POINTER;
- CHARSDATA : ARRAY [' '..']',1..3] OF BYTE;
- F : FILE;
- B,ROW,NR : BYTE;
- X,Y,I : INTEGER;
- CH,K : CHAR;
- TEKST : STRING;
- PAL : ARRAY [0..33] OF BYTE;
- SINUS : ARRAY [0..255] OF BYTE;
- SINN : BYTE;
- YPOS,YINC : INTEGER;
-
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE CALCSIN;
- VAR I : INTEGER;
- BEGIN
- FOR I := 0 TO 255 DO SINUS[I] := ROUND(SIN(6*I*PI/555)*10)+11;
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE INITVGA; ASSEMBLER; { INITIALIZE VGA CARD MODE 13H }
- ASM
- MOV AX,0013H
- INT 10H
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE CLOSEVGA; ASSEMBLER; { CLOSE VGA MODE AND SET TEXT }
- ASM
- MOV AX,0003H
- INT 10H
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE VSYNC; ASSEMBLER;
- ASM
- MOV DX,03DAH
- @L1: IN AL,DX; TEST AL,8; JNZ @L1;
- @L2: IN AL,DX; TEST AL,8; JZ @L2;
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE DRAWBITMAP; ASSEMBLER;
- ASM
- MOV DI,SCR_OFS
- MOV ES,SEGA000
- MOV SI,OFFSET BITMAP
- MOV CX,9600
- CLD
- REP MOVSW
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE SCROLLBITMAP(VAR MAP); ASSEMBLER;
- ASM
- LDS SI,MAP
- LES DI,MAP
- INC SI
- INC SI
- INC SI
- MOV CX,9600
- REP MOVSW
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE SETCOLOR(NR,R,G,B: BYTE); ASSEMBLER; { SET RGB VAL TO COLOR NR }
- ASM
- MOV DX,3C8H
- MOV AL,NR
- OUT DX,AL
- INC DX
- MOV AL,R
- OUT DX,AL
- MOV AL,G
- OUT DX,AL
- MOV AL,B
- OUT DX,AL
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE LOADPAL(NAME: STRING); { LOAD .PAL FILE AND SET PALETTE }
- BEGIN
- ASSIGN(F,NAME+'.PAL');
- RESET(F,1);
- BLOCKREAD(F,PALETTE,768);
- CLOSE(F);
- FOR B:=0 TO 255 DO SETCOLOR(B,PALETTE[B,1],PALETTE[B,2],PALETTE[B,3]);
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE LOADTED(NAME: STRING); { LOAD .TED FILE TO MEMORY }
- VAR TX,TY: BYTE; CH: CHAR;
- BEGIN
- ASSIGN(F,NAME+'.TED');
- RESET(F,1);
- SEEK(F,20);
- WHILE NOT(EOF(F)) DO
- BEGIN
- BLOCKREAD(F,CH,1);
- BLOCKREAD(F,TX,1);
- BLOCKREAD(F,TY,1);
- GETMEM(CHARS[CH],TX*TY);
- CHARSDATA[CH,1]:=TX; CHARSDATA[CH,2]:=TY; CHARSDATA[CH,3]:=1;
- BLOCKREAD(F,CHARS[CH]^,TX*TY);
- END;
- IF CHARSDATA[' ',3]<>1 THEN { IF NOT SPACE " " THEN CREATE IT }
- BEGIN
- TX:=CHARSDATA['A',1];
- TY:=CHARSDATA['A',2];
- GETMEM(CHARS[' '],TX*TY);
- FILLCHAR(CHARS[' ']^,TX*TY,0);
- CHARSDATA[' ',3]:=1;
- CHARSDATA[' ',1]:=TX;
- CHARSDATA[' ',2]:=TY;
- END;
- CLOSE(F);
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE DONETED; { DEALLOCATE FONT MEMORY }
- VAR CH: CHAR;
- BEGIN
- FOR CH:=' ' TO ']' DO
- BEGIN
- IF CHARSDATA[CH,3]=1 THEN
- BEGIN
- FREEMEM(CHARS[CH],CHARSDATA[CH,1]*CHARSDATA[CH,2]);
- CHARSDATA[CH,3]:=0;
- END;
- END;
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE NEWROW(CH: CHAR; RO: BYTE; POS: INTEGER); { DRAW HORIZ LINE }
- VAR II,TX,TY: INTEGER;
- BEGIN
- FOR II:=1 TO 60 DO BITMAP[I,POS]:=210;
- IF CHARSDATA[CH,3]<>1 THEN EXIT;
- IF RO=CHARSDATA[CH,1]+1 THEN
- FOR TY:=1 TO 34 DO BITMAP[TY,POS]:=200+TY-1
- ELSE
- FOR TY:=1 TO CHARSDATA[CH,2] DO
- BITMAP[TY,POS]:=MEM[SEG(CHARS[CH]^):OFS(CHARS[CH]^)+(TY-1)*CHARSDATA[CH,1]+RO-1];
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE UPDATE; { NEW VALUES ? }
- BEGIN
- INC(ROW);
- IF ROW>CHARSDATA[TEKST[NR],1]+1 THEN
- BEGIN
- ROW:=1;
- INC(NR);
- IF NR>LENGTH(TEKST) THEN NR:=1;
- END;
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE MUTEFONT;
- VAR AX,AY: INTEGER; CH: CHAR;
- BEGIN
- FOR CH:=' ' TO ']' DO
- IF CHARSDATA[CH,3]=1 THEN
- BEGIN
- FOR AY:=0 TO CHARSDATA[CH,2]-1 DO
- FOR AX:=0 TO CHARSDATA[CH,1]-1 DO
- BEGIN
- IF MEM[SEG(CHARS[CH]^):OFS(CHARS[CH]^)+AY*CHARSDATA[CH,1]+AX]=0 THEN
- MEM[SEG(CHARS[CH]^):OFS(CHARS[CH]^)+AY*CHARSDATA[CH,1]+AX]:=200+AY;
- END;
- END;
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE SETFPAL;
- VAR B: BYTE;
- BEGIN
- FOR B:=0 TO 33 DO SETCOLOR(200+B,PAL[B],0,0);
- END;
- {───────────────────────────────────────────────────────────────────────────}
- PROCEDURE BAR(OFF: BYTE);
- BEGIN
- FILLCHAR(PAL,34,0);
- FOR I:=0 TO 5 DO
- BEGIN
- PAL[OFF+I]:=10+I*9;
- PAL[OFF+11-I]:=10+I*9;
- END;
- SETFPAL;
- END;
- {───────────────────────────────────────────────────────────────────────────}
-
-
-
- BEGIN
- CALCSIN;
- INITVGA;
- LOADPAL('FONT010');
- LOADTED('FONT010');
- MUTEFONT;
- ROW:=1;
- TEKST:=' OK.. NOW TIME TO SOME BACKGROUND EFFECT... ONE SINUS FLYING BAR... @@ HMMM.. NOTHING TO SAY .. :-] ';
- NR:=1;
- YPOS:=0;
- SINN:=0;
- REPEAT
- SCROLLBITMAP(BITMAP);
- UPDATE;
- NEWROW(TEKST[NR],ROW,317);
- UPDATE;
- NEWROW(TEKST[NR],ROW,318);
- UPDATE;
- NEWROW(TEKST[NR],ROW,319);
- DRAWBITMAP;
- VSYNC;
- INC(SINN);
- IF SINN=183 THEN SINN:=0;
- YPOS:=SINUS[SINN];
- BAR(YPOS);
- SETFPAL;
- UNTIL KEYPRESSED;
- DONETED;
- CLOSEVGA;
- END.